package gui;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import modelo.Cliente;
import modelo.Sgmunicipio;
import modelo.Sguf;
import modelo.dao.ClienteJpaController;
import modelo.dao.SgmunicipioJpaController;
import modelo.dao.SgufJpaController;
import modelo.dao.exceptions.PreexistingEntityException;
import util.MaiusculaLimitadaAsg;
import util.ManangerEntity;
import util.NumericPlainDocument;
import util.ValidacaoCPF;

public class GUICadCliente extends javax.swing.JDialog {
    
    private boolean guiEncerrado = false;
    boolean incluir = false;
    Cliente cliente;
    SgmunicipioJpaController daoMunicipio = new SgmunicipioJpaController(ManangerEntity.getEntityManagerFactory());
    SgufJpaController daoUf = new SgufJpaController(ManangerEntity.getEntityManagerFactory());

    Date dataAtual = new Date(System.currentTimeMillis());
    SimpleDateFormat formatarDate = new SimpleDateFormat("dd/MM/yyyy");
    /**
     * Creates new form GUICadCliente
     */
    public GUICadCliente(boolean incluir, Cliente cliente) {
        this.incluir = incluir;
        this.cliente = cliente;
        initComponents();
        setLocationRelativeTo(null);
        tfNome.grabFocus();
        carregaComboBoxEstados();
        if (!incluir) {
            btSalvar.setText("Alterar");
            carregaClienteSelecionado(cliente);
        }
        
    }
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pnTitulo = new javax.swing.JPanel();
        lbTitulo = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        pnCadastro = new javax.swing.JPanel();
        pnLabels = new javax.swing.JPanel();
        lbCodigo = new javax.swing.JLabel();
        lbNome = new javax.swing.JLabel();
        lbTipoPessoa = new javax.swing.JLabel();
        lbCpf = new javax.swing.JLabel();
        lbIe = new javax.swing.JLabel();
        lbEndereco = new javax.swing.JLabel();
        lbEstado = new javax.swing.JLabel();
        lbCidade = new javax.swing.JLabel();
        lbCidadeAntiga = new javax.swing.JLabel();
        lbBairro = new javax.swing.JLabel();
        lbCep = new javax.swing.JLabel();
        lbFone1 = new javax.swing.JLabel();
        lbFone2 = new javax.swing.JLabel();
        lbCelular = new javax.swing.JLabel();
        lbFax = new javax.swing.JLabel();
        lbEmail = new javax.swing.JLabel();
        pnTF = new javax.swing.JPanel();
        tfId = new javax.swing.JTextField();
        tfNome = new javax.swing.JTextField();
        tfNome.setDocument(new MaiusculaLimitadaAsg(50, true));
        cbTipoPessoa = new javax.swing.JComboBox();
        tfCnpjCpf = new javax.swing.JTextField();
        try{
            javax.swing.text.MaskFormatter cpf= new javax.swing.text.MaskFormatter("###.###.###-##");
            cpf.setValidCharacters(" 1234567890");
            tfCnpjCpf = new javax.swing.JFormattedTextField(cpf);
        }
        catch (Exception e){
        }
        tfIe = new javax.swing.JTextField();
        tfEndereco = new javax.swing.JTextField();
        tfEndereco.setDocument(new MaiusculaLimitadaAsg(50, true));
        cbEstado = new javax.swing.JComboBox();
        cbCidade = new javax.swing.JComboBox();
        tfCidadeAntiga = new javax.swing.JTextField();
        tfCidadeAntiga.setDocument(new MaiusculaLimitadaAsg(50, true));
        tfBairro = new javax.swing.JTextField();
        tfBairro.setDocument(new MaiusculaLimitadaAsg(45, true));
        tfCep = new javax.swing.JTextField();
        try{
            javax.swing.text.MaskFormatter cep= new javax.swing.text.MaskFormatter("#####-###");
            cep.setValidCharacters(" 1234567890");
            tfCep = new javax.swing.JFormattedTextField(cep);
        }
        catch (Exception e){
        }
        tfFone1 = new javax.swing.JTextField();
        tfFone1.setDocument(new NumericPlainDocument());
        tfFone2 = new javax.swing.JTextField();
        tfCelular = new javax.swing.JTextField();
        tfCelular.setDocument(new NumericPlainDocument());
        tfFax = new javax.swing.JTextField();
        tfFax.setDocument(new NumericPlainDocument());
        tfEmail = new javax.swing.JTextField();
        pnBT = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        btSalvar = new javax.swing.JButton();
        btCancelar = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Cadastro de Clientes");

        pnTitulo.setBackground(new java.awt.Color(255, 255, 255));

        lbTitulo.setFont(new java.awt.Font("Bookman Old Style", 0, 26)); // NOI18N
        lbTitulo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icones24x24/User group.png"))); // NOI18N
        lbTitulo.setText("CADASTRO DE CLIENTES");
        pnTitulo.add(lbTitulo);

        getContentPane().add(pnTitulo, java.awt.BorderLayout.NORTH);

        jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.LINE_AXIS));
        getContentPane().add(jPanel1, java.awt.BorderLayout.EAST);

        pnCadastro.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        pnCadastro.setLayout(new java.awt.BorderLayout());

        pnLabels.setLayout(new java.awt.GridLayout(16, 1));

        lbCodigo.setText("Código");
        pnLabels.add(lbCodigo);

        lbNome.setText("Nome:");
        pnLabels.add(lbNome);

        lbTipoPessoa.setText("Tipo Pessoa");
        pnLabels.add(lbTipoPessoa);

        lbCpf.setText("CNPJ/CPF:");
        pnLabels.add(lbCpf);

        lbIe.setText("Inscrição Estadual");
        pnLabels.add(lbIe);

        lbEndereco.setText("Endereço:");
        pnLabels.add(lbEndereco);

        lbEstado.setText("Estado:");
        pnLabels.add(lbEstado);

        lbCidade.setText("Cidade:");
        pnLabels.add(lbCidade);

        lbCidadeAntiga.setText("Cidade Antiga");
        pnLabels.add(lbCidadeAntiga);

        lbBairro.setText("Bairro:");
        pnLabels.add(lbBairro);

        lbCep.setText("Cep:");
        pnLabels.add(lbCep);

        lbFone1.setText("Telefone 1:");
        pnLabels.add(lbFone1);

        lbFone2.setText("Telefone 2:");
        pnLabels.add(lbFone2);

        lbCelular.setText("Celular:");
        pnLabels.add(lbCelular);

        lbFax.setText("Fax:");
        pnLabels.add(lbFax);

        lbEmail.setText("E-mail");
        pnLabels.add(lbEmail);

        pnCadastro.add(pnLabels, java.awt.BorderLayout.WEST);

        pnTF.setLayout(new java.awt.GridLayout(16, 1));

        tfId.setEditable(false);
        pnTF.add(tfId);
        pnTF.add(tfNome);

        cbTipoPessoa.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Jurídica", "Física" }));
        pnTF.add(cbTipoPessoa);

        tfCnpjCpf.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tfCnpjCpfActionPerformed(evt);
            }
        });
        pnTF.add(tfCnpjCpf);
        pnTF.add(tfIe);
        pnTF.add(tfEndereco);

        cbEstado.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cbEstadoActionPerformed(evt);
            }
        });
        pnTF.add(cbEstado);

        cbCidade.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Carregando..." }));
        pnTF.add(cbCidade);

        tfCidadeAntiga.setEditable(false);
        pnTF.add(tfCidadeAntiga);
        pnTF.add(tfBairro);
        pnTF.add(tfCep);
        pnTF.add(tfFone1);
        pnTF.add(tfFone2);
        pnTF.add(tfCelular);
        pnTF.add(tfFax);
        pnTF.add(tfEmail);

        pnCadastro.add(pnTF, java.awt.BorderLayout.CENTER);

        getContentPane().add(pnCadastro, java.awt.BorderLayout.CENTER);

        pnBT.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        pnBT.setLayout(new java.awt.BorderLayout());

        jPanel2.setLayout(new java.awt.GridLayout());

        btSalvar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icones24x24/Save.png"))); // NOI18N
        btSalvar.setText("Salvar");
        btSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btSalvarActionPerformed(evt);
            }
        });
        jPanel2.add(btSalvar);

        btCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icones24x24/No-entry.png"))); // NOI18N
        btCancelar.setText("Cancelar");
        btCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btCancelarActionPerformed(evt);
            }
        });
        jPanel2.add(btCancelar);

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icones24x24/Exit.png"))); // NOI18N
        jButton1.setText("Sair");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jPanel2.add(jButton1);

        pnBT.add(jPanel2, java.awt.BorderLayout.CENTER);

        getContentPane().add(pnBT, java.awt.BorderLayout.SOUTH);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btSalvarActionPerformed
        ClienteJpaController daoCliente = new ClienteJpaController(ManangerEntity.getEntityManagerFactory());
        Cliente m = new Cliente();        
        m.setDtcadastro(dataAtual);
        m.setNome(tfNome.getText());
        m.setBairro(tfBairro.getText());
        m.setCelular(tfCelular.getText());
        m.setCep(tfCep.getText().replace("-", ""));
        m.setEndereco(tfEndereco.getText());
        m.setFax(tfFax.getText());
        m.setFone1(tfFone1.getText());
        m.setFone2(tfFone2.getText());        
        m.setCnpjCpf(tfCnpjCpf.getText().replace(".", "").replace("-", ""));
        m.setIe(tfIe.getText());
        m.setEmail(tfEmail.getText());
        m.setTipopessoa(cbTipoPessoa.getSelectedItem().toString());
        Sguf u = daoUf.getUfByNomeUfSingle(cbEstado.getSelectedItem().toString());
        m.setCoduf(u.getCoduf());
        m.setNomeuf(cbEstado.getSelectedItem().toString());
        if (tfCidadeAntiga.getText().equals("")) {            
            m.setCidadeantiga(cbCidade.getSelectedItem().toString() +" "+ u.getSgufPK().getSiglauf());
        } else {
            m.setCidadeantiga(tfCidadeAntiga.getText());
        }
        Sgmunicipio mun = daoMunicipio.getMunicipioByNomeMunSingle(cbCidade.getSelectedItem().toString()
                ,u.getSgufPK().getSiglauf());
        m.setCodmunicipio(mun.getSgmunicipioPK().getCodmunic());
        m.setMunicipio(cbCidade.getSelectedItem().toString());
        switch (btSalvar.getText()) {
            case "Salvar":
                try {
                    daoCliente.create(m);
                    util.Mensagem.exibirMensagem("Cadastro realizado com sucesso!", "Atenção", false);
                    encerrado();
                    this.dispose();
                } catch (PreexistingEntityException ex) {
                    util.Mensagem.exibirMensagem(ex.getMessage(), "Erro daoCliente", true);
                } catch (Exception ex) {
                    util.Mensagem.exibirMensagem(ex.getMessage(), "Erro daoCliente", true);
                }
                break;
            case "Alterar":
                m.setId(Integer.parseInt(tfId.getText()));
                try {
                    daoCliente.edit(m);
                    util.Mensagem.exibirMensagem("Cadastro atualizado com sucesso!", "Atenção", false);
                    encerrado();
                    this.dispose();
                } catch (PreexistingEntityException ex) {
                    util.Mensagem.exibirMensagem(ex.getMessage(), "Erro daoCliente", true);
                } catch (Exception ex) {
                    util.Mensagem.exibirMensagem(ex.getMessage(), "Erro daoCliente", true);
                }
                break;
        }
    }//GEN-LAST:event_btSalvarActionPerformed
    
    private void btCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCancelarActionPerformed
        dispose();
    }//GEN-LAST:event_btCancelarActionPerformed
    
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        dispose();
    }//GEN-LAST:event_jButton1ActionPerformed
    
    private void cbEstadoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbEstadoActionPerformed
        cbCidade.removeAllItems();
        
        List<Sguf> SiglaUf = daoUf.getUfByNomeUf(cbEstado.getSelectedItem().toString());
        
        for (int i = 0; i < SiglaUf.size(); i++) {
            Sguf uf = (Sguf) SiglaUf.get(i);
            List<Sgmunicipio> list = daoMunicipio.getMunicipiosBySiglaUf(uf.getSgufPK().getSiglauf());
            for (int x = 0; x < list.size(); x++) {
                Sgmunicipio mun = (Sgmunicipio) list.get(x);
                cbCidade.addItem(mun.getNomemunic());
            }
        }
    }//GEN-LAST:event_cbEstadoActionPerformed
    
    private void tfCnpjCpfActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tfCnpjCpfActionPerformed
        if (ValidacaoCPF.validaCPF(tfCnpjCpf.getText().replace(".", "").replace("-", ""))) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
        
    }//GEN-LAST:event_tfCnpjCpfActionPerformed
    
    boolean encerrado() {
        guiEncerrado = true;  //Marcamos que o dados 
        setModal(true);         //A dialog tem que ser modal. Só pode retornar do setVisible após ficar invisível.
        setVisible(true);       //Mostramos a dialog e esperamos o usuário escolher alguma coisa.
        return guiEncerrado;   //Retornamos true, se ele pressionou ok.
    }
    
    public void carregaComboBoxEstados() {
        List<Sguf> list = daoUf.findSgufEntities();
        for (int i = 0; i < list.size(); i++) {
            Sguf uf = (Sguf) list.get(i);
            //SgufPK sgPk = uf.getSgufPK();
            cbEstado.addItem(uf.getNomeuf());
        }
        cbEstado.setSelectedItem("Rio Grande do Sul");
    }
    
    public void carregaClienteSelecionado(Cliente cliente) {
        tfId.setText(cliente.getId().toString());
        tfNome.setText(cliente.getNome());
        tfEndereco.setText(cliente.getEndereco());
        tfBairro.setText(cliente.getBairro());
        tfCelular.setText(cliente.getCelular());
        tfCep.setText(cliente.getCep());
        tfFax.setText(cliente.getFax());
        tfFone1.setText(cliente.getFone1());
        tfFone2.setText(cliente.getFone2());
        tfCnpjCpf.setText(cliente.getCnpjCpf());
        tfIe.setText(cliente.getIe());
        tfCidadeAntiga.setText(cliente.getCidadeantiga());
        tfEmail.setText(cliente.getEmail());
        
        if (cliente.getNomeuf() != null) {
            cbEstado.setSelectedItem(cliente.getNomeuf());
            cbCidade.setSelectedItem(cliente.getMunicipio());
        }
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btCancelar;
    private javax.swing.JButton btSalvar;
    private javax.swing.JComboBox cbCidade;
    private javax.swing.JComboBox cbEstado;
    private javax.swing.JComboBox cbTipoPessoa;
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JLabel lbBairro;
    private javax.swing.JLabel lbCelular;
    private javax.swing.JLabel lbCep;
    private javax.swing.JLabel lbCidade;
    private javax.swing.JLabel lbCidadeAntiga;
    private javax.swing.JLabel lbCodigo;
    private javax.swing.JLabel lbCpf;
    private javax.swing.JLabel lbEmail;
    private javax.swing.JLabel lbEndereco;
    private javax.swing.JLabel lbEstado;
    private javax.swing.JLabel lbFax;
    private javax.swing.JLabel lbFone1;
    private javax.swing.JLabel lbFone2;
    private javax.swing.JLabel lbIe;
    private javax.swing.JLabel lbNome;
    private javax.swing.JLabel lbTipoPessoa;
    private javax.swing.JLabel lbTitulo;
    private javax.swing.JPanel pnBT;
    private javax.swing.JPanel pnCadastro;
    private javax.swing.JPanel pnLabels;
    private javax.swing.JPanel pnTF;
    private javax.swing.JPanel pnTitulo;
    private javax.swing.JTextField tfBairro;
    private javax.swing.JTextField tfCelular;
    private javax.swing.JTextField tfCep;
    private javax.swing.JTextField tfCidadeAntiga;
    private javax.swing.JTextField tfCnpjCpf;
    private javax.swing.JTextField tfEmail;
    private javax.swing.JTextField tfEndereco;
    private javax.swing.JTextField tfFax;
    private javax.swing.JTextField tfFone1;
    private javax.swing.JTextField tfFone2;
    private javax.swing.JTextField tfId;
    private javax.swing.JTextField tfIe;
    private javax.swing.JTextField tfNome;
    // End of variables declaration//GEN-END:variables
}
